人脸生成(Face Generation)

在该项目中,你将使用生成式对抗网络(Generative Adversarial Nets)来生成新的人脸图像。

获取数据

该项目将使用以下数据集:

  • MNIST
  • CelebA

由于 CelebA 数据集比较复杂,而且这是你第一次使用 GANs。我们想让你先在 MNIST 数据集上测试你的 GANs 模型,以让你更快的评估所建立模型的性能。

如果你在使用 FloydHub, 请将 data_dir 设置为 "/input" 并使用 FloydHub data ID "R5KrjnANiKVhLWAkpXhNBe".

In [48]:
data_dir = './data'

# FloydHub - Use with data ID "R5KrjnANiKVhLWAkpXhNBe"
#data_dir = '/input'


"""
DON'T MODIFY ANYTHING IN THIS CELL
"""
import helper

helper.download_extract('mnist', data_dir)
helper.download_extract('celeba', data_dir)
Found mnist Data
Found celeba Data

探索数据(Explore the Data)

MNIST

MNIST 是一个手写数字的图像数据集。你可以更改 show_n_images 探索此数据集。

In [49]:
show_n_images = 25

"""
DON'T MODIFY ANYTHING IN THIS CELL
"""
%matplotlib inline
import os
from glob import glob
from matplotlib import pyplot

mnist_images = helper.get_batch(glob(os.path.join(data_dir, 'mnist/*.jpg'))[:show_n_images], 28, 28, 'L')
pyplot.imshow(helper.images_square_grid(mnist_images, 'L'), cmap='gray')
Out[49]:
<matplotlib.image.AxesImage at 0x1a4f0e6a780>

CelebA

CelebFaces Attributes Dataset (CelebA) 是一个包含 20 多万张名人图片及相关图片说明的数据集。你将用此数据集生成人脸,不会用不到相关说明。你可以更改 show_n_images 探索此数据集。

In [50]:
show_n_images = 25

"""
DON'T MODIFY ANYTHING IN THIS CELL
"""
mnist_images = helper.get_batch(glob(os.path.join(data_dir, 'img_align_celeba/*.jpg'))[:show_n_images], 28, 28, 'RGB')
pyplot.imshow(helper.images_square_grid(mnist_images, 'RGB'))
Out[50]:
<matplotlib.image.AxesImage at 0x1a4f1f60a58>

预处理数据(Preprocess the Data)

由于该项目的重点是建立 GANs 模型,我们将为你预处理数据。

经过数据预处理,MNIST 和 CelebA 数据集的值在 28×28 维度图像的 [-0.5, 0.5] 范围内。CelebA 数据集中的图像裁剪了非脸部的图像部分,然后调整到 28x28 维度。

MNIST 数据集中的图像是单通道的黑白图像,CelebA 数据集中的图像是 三通道的 RGB 彩色图像

建立神经网络(Build the Neural Network)

你将通过部署以下函数来建立 GANs 的主要组成部分:

  • model_inputs
  • discriminator
  • generator
  • model_loss
  • model_opt
  • train

检查 TensorFlow 版本并获取 GPU 型号

检查你是否使用正确的 TensorFlow 版本,并获取 GPU 型号

In [51]:
"""
DON'T MODIFY ANYTHING IN THIS CELL
"""
from distutils.version import LooseVersion
import warnings
import tensorflow as tf

# Check TensorFlow Version
assert LooseVersion(tf.__version__) >= LooseVersion('1.0'), 'Please use TensorFlow version 1.0 or newer.  You are using {}'.format(tf.__version__)
print('TensorFlow Version: {}'.format(tf.__version__))

# Check for a GPU
if not tf.test.gpu_device_name():
    warnings.warn('No GPU found. Please use a GPU to train your neural network.')
else:
    print('Default GPU Device: {}'.format(tf.test.gpu_device_name()))
TensorFlow Version: 1.0.0
Default GPU Device: /gpu:0

输入(Input)

部署 model_inputs 函数以创建用于神经网络的 占位符 (TF Placeholders)。请创建以下占位符:

  • 输入图像占位符: 使用 image_widthimage_heightimage_channels 设置为 rank 4。
  • 输入 Z 占位符: 设置为 rank 2,并命名为 z_dim
  • 学习速率占位符: 设置为 rank 0。

返回占位符元组的形状为 (tensor of real input images, tensor of z data, learning rate)。

In [52]:
import problem_unittests as tests

def model_inputs(image_width, image_height, image_channels, z_dim):
    """
    Create the model inputs
    :param image_width: The input image width
    :param image_height: The input image height
    :param image_channels: The number of image channels
    :param z_dim: The dimension of Z
    :return: Tuple of (tensor of real input images, tensor of z data, learning rate)
    """
    # TODO: Implement Function
    input_real = tf.placeholder(tf.float32, [None, image_width, image_height, image_channels], name='input_real')
    input_z = tf.placeholder(tf.float32, (None, z_dim), name='input_z')
    learning_rate = tf.placeholder(tf.float32, name='lr')
    return (input_real, input_z, learning_rate)


"""
DON'T MODIFY ANYTHING IN THIS CELL THAT IS BELOW THIS LINE
"""
tests.test_model_inputs(model_inputs)
Tests Passed

辨别器(Discriminator)

部署 discriminator 函数创建辨别器神经网络以辨别 images。该函数应能够重复使用神经网络中的各种变量。 在 tf.variable_scope 中使用 "discriminator" 的变量空间名来重复使用该函数中的变量。

该函数应返回形如 (tensor output of the discriminator, tensor logits of the discriminator) 的元组。

In [53]:
def discriminator(images, reuse=False):
    """
    Create the discriminator network
    :param image: Tensor of input image(s)
    :param reuse: Boolean if the weights should be reused
    :return: Tuple of (tensor output of the discriminator, tensor logits of the discriminator)
    """
    # TODO: Implement Function
    alpha = 0.2
    with tf.variable_scope("discriminator", reuse=reuse):
        x1 = tf.layers.conv2d(images, 64, 5, strides=2, padding='same', kernel_initializer=tf.contrib.layers.xavier_initializer())
        relu1 = tf.maximum(alpha * x1, x1)
        relu1 = tf.nn.dropout(relu1, keep_prob=0.5)
        # 14x14x64
        
        x2 = tf.layers.conv2d(relu1, 128, 5, strides=1, padding='same', kernel_initializer=tf.contrib.layers.xavier_initializer())
        bn2 = tf.layers.batch_normalization(x2, training=True)
        relu2 = tf.maximum(alpha * bn2, bn2)
        relu2 = tf.nn.dropout(relu2, keep_prob=0.5)
        # 14x14x128

        x3 = tf.layers.conv2d(relu2, 256, 5, strides=2, padding='same', kernel_initializer=tf.contrib.layers.xavier_initializer())
        bn3 = tf.layers.batch_normalization(x3, training=True)
        relu3 = tf.maximum(alpha * bn3, bn3)
        relu3 = tf.nn.dropout(relu3, keep_prob=0.5)
        # 7x7x256
        
        # Flatten it
        flat = tf.reshape(relu2, (-1, 7*7*128))
        logits = tf.layers.dense(flat, 1)
        output = tf.sigmoid(logits)
        
    return output, logits


"""
DON'T MODIFY ANYTHING IN THIS CELL THAT IS BELOW THIS LINE
"""
tests.test_discriminator(discriminator, tf)
Tests Passed

生成器(Generator)

部署 generator 函数以使用 z 生成图像。该函数应能够重复使用神经网络中的各种变量。 在 tf.variable_scope 中使用 "generator" 的变量空间名来重复使用该函数中的变量。

该函数应返回所生成的 28 x 28 x out_channel_dim 维度图像。

In [54]:
def generator(z, out_channel_dim, is_train=True):
    """
    Create the generator network
    :param z: Input z
    :param out_channel_dim: The number of channels in the output image
    :param is_train: Boolean if generator is being used for training
    :return: The tensor output of the generator
    """
    # TODO: Implement Function
    if is_train:
        reuse = False
    else:
        reuse = True
    alpha = 0.2
    
#     if is_train:
#         keep_prob = 0.5
#     else:
#         keep_prob = 1.0
    keep_prob = 0.5
    with tf.variable_scope("generator", reuse=reuse):
        
        # First fully connected layer
        x1 = tf.layers.dense(z, 7*7*512)
        
        # Reshape it to start the convolutional\
        x1 = tf.reshape(x1, (-1, 7, 7, 512))
        x1 = tf.layers.batch_normalization(x1, training=is_train)
        x1 = tf.maximum(alpha * x1, x1)
        x1 = tf.nn.dropout(x1, keep_prob=keep_prob)
        # 7x7x512 now
        
        x2 = tf.layers.conv2d_transpose(x1, 256, 5, strides=2, padding='same')
        x2 = tf.layers.batch_normalization(x2, training=is_train)
        x2 = tf.maximum(alpha * x2, x2)
        x2 = tf.nn.dropout(x2, keep_prob=keep_prob)
        # 14x14x256 now
        
        x3 = tf.layers.conv2d_transpose(x2, 128, 5, strides=1, padding='same')
        x3 = tf.layers.batch_normalization(x3, training=is_train)
        x3 = tf.maximum(alpha * x3, x3)
        x3 = tf.nn.dropout(x3, keep_prob=keep_prob)
        # 14x14x128now
        
        # Output layer
        logits = tf.layers.conv2d_transpose(x3, out_channel_dim, 3, strides=2, padding='same')
        # 28x28x3 now
        
        out = tf.tanh(logits)
    return out


"""
DON'T MODIFY ANYTHING IN THIS CELL THAT IS BELOW THIS LINE
"""
tests.test_generator(generator, tf)
Tests Passed

损失函数(Loss)

部署 model_loss 函数训练并计算 GANs 的损失。该函数应返回形如 (discriminator loss, generator loss) 的元组。

使用你已实现的函数:

  • discriminator(images, reuse=False)
  • generator(z, out_channel_dim, is_train=True)
In [55]:
def model_loss(input_real, input_z, out_channel_dim):
    """
    Get the loss for the discriminator and generator
    :param input_real: Images from the real dataset
    :param input_z: Z input
    :param out_channel_dim: The number of channels in the output image
    :return: A tuple of (discriminator loss, generator loss)
    """
    # TODO: Implement Function
    smooth = 0.1
    g_model = generator(input_z, out_channel_dim, is_train=True)
    d_output_real, d_logits_real = discriminator(input_real, reuse=False)
    d_output_fake, d_logits_fake = discriminator(g_model, reuse=True)
    
    d_loss_real = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=d_logits_real, labels=tf.ones_like(d_logits_real) * (1-smooth)))
    d_loss_fake = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=d_logits_fake, labels=tf.zeros_like(d_logits_fake)))
    d_loss = d_loss_real + d_loss_fake
    
    g_loss = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=d_logits_fake, labels=tf.ones_like(d_logits_fake)))
    return d_loss, g_loss


"""
DON'T MODIFY ANYTHING IN THIS CELL THAT IS BELOW THIS LINE
"""
tests.test_model_loss(model_loss)
Tests Passed

优化(Optimization)

部署 model_opt 函数实现对 GANs 的优化。使用 tf.trainable_variables 获取可训练的所有变量。通过变量空间名 discriminatorgenerator 来过滤变量。该函数应返回形如 (discriminator training operation, generator training operation) 的元组。

In [56]:
def model_opt(d_loss, g_loss, learning_rate, beta1):
    """
    Get optimization operations
    :param d_loss: Discriminator loss Tensor
    :param g_loss: Generator loss Tensor
    :param learning_rate: Learning Rate Placeholder
    :param beta1: The exponential decay rate for the 1st moment in the optimizer
    :return: A tuple of (discriminator training operation, generator training operation)
    """
    # TODO: Implement Function
    tf_vars = tf.trainable_variables()
    d_vars = [ele for ele in tf_vars if ele.name.startswith('discriminator')]
    g_vars = [ele for ele in tf_vars if ele.name.startswith('generator')]
    
    with tf.control_dependencies(tf.get_collection(tf.GraphKeys.UPDATE_OPS)):
        d_op = tf.train.AdamOptimizer(learning_rate, beta1=beta1).minimize(d_loss, var_list=d_vars)
        g_op = tf.train.AdamOptimizer(learning_rate, beta1=beta1).minimize(g_loss, var_list=g_vars)
    return d_op, g_op


"""
DON'T MODIFY ANYTHING IN THIS CELL THAT IS BELOW THIS LINE
"""
tests.test_model_opt(model_opt, tf)
Tests Passed

训练神经网络(Neural Network Training)

输出显示

使用该函数可以显示生成器 (Generator) 在训练过程中的当前输出,这会帮你评估 GANs 模型的训练程度。

In [57]:
"""
DON'T MODIFY ANYTHING IN THIS CELL
"""
import numpy as np

def show_generator_output(sess, n_images, input_z, out_channel_dim, image_mode):
    """
    Show example output for the generator
    :param sess: TensorFlow session
    :param n_images: Number of Images to display
    :param input_z: Input Z Tensor
    :param out_channel_dim: The number of channels in the output image
    :param image_mode: The mode to use for images ("RGB" or "L")
    """
    cmap = None if image_mode == 'RGB' else 'gray'
    z_dim = input_z.get_shape().as_list()[-1]
    example_z = np.random.uniform(-1, 1, size=[n_images, z_dim])

    samples = sess.run(
        generator(input_z, out_channel_dim, False),
        feed_dict={input_z: example_z})

    images_grid = helper.images_square_grid(samples, image_mode)
    pyplot.imshow(images_grid, cmap=cmap)
    pyplot.show()

训练

部署 train 函数以建立并训练 GANs 模型。记得使用以下你已完成的函数:

  • model_inputs(image_width, image_height, image_channels, z_dim)
  • model_loss(input_real, input_z, out_channel_dim)
  • model_opt(d_loss, g_loss, learning_rate, beta1)

使用 show_generator_output 函数显示 generator 在训练过程中的输出。

注意:在每个批次 (batch) 中运行 show_generator_output 函数会显著增加训练时间与该 notebook 的体积。推荐每 100 批次输出一次 generator 的输出。

In [58]:
def train(epoch_count, batch_size, z_dim, learning_rate, beta1, get_batches, data_shape, data_image_mode):
    """
    Train the GAN
    :param epoch_count: Number of epochs
    :param batch_size: Batch Size
    :param z_dim: Z dimension
    :param learning_rate: Learning Rate
    :param beta1: The exponential decay rate for the 1st moment in the optimizer
    :param get_batches: Function to get batches
    :param data_shape: Shape of the data
    :param data_image_mode: The image mode to use for images ("RGB" or "L")
    """
    # TODO: Build Model
#     saver = tf.train.Saver() 
    if data_image_mode == 'RGB':
        image_channel = 3
    elif data_image_mode == 'L':
        image_channel = 1
    input_real, input_z, lr = model_inputs(data_shape[1], data_shape[2], image_channel, z_dim)
    d_loss, g_loss = model_loss(input_real, input_z, image_channel)
    d_op, g_op = model_opt(d_loss, g_loss, learning_rate, beta1)
    print_batch = 25
    show_batch = 100
    steps = 0
    losses = []
    samples = []
    with tf.Session() as sess:
        sess.run(tf.global_variables_initializer())
        for epoch_i in range(epoch_count):
            for batch_images in get_batches(batch_size):
                # TODO: Train Model
                steps += 1
                batch_images = batch_images*2
                batch_z = np.random.uniform(-1, 1, size=(batch_size, z_dim))

                # Run optimizers
                _ = sess.run(d_op, feed_dict={input_real: batch_images, input_z: batch_z, lr: learning_rate})
                _ = sess.run(g_op, feed_dict={input_real: batch_images, input_z: batch_z, lr: learning_rate})

                if steps % print_batch == 0:
                    # At the end of each epoch, get the losses and print them out
                    train_loss_d = d_loss.eval({input_z: batch_z, input_real: batch_images})
                    train_loss_g = g_loss.eval({input_z: batch_z})

                    print("Epoch {}/{}...".format(epoch_i+1, epoch_count),
                          "Discriminator Loss: {:.4f}...".format(train_loss_d),
                          "Generator Loss: {:.4f}".format(train_loss_g))
                    # Save losses to view after training
                    losses.append((train_loss_d, train_loss_g))
                if steps % show_batch == 0:
                    gen_samples = sess.run(
                                   generator(input_z, image_channel, is_train=False),
                                   feed_dict={input_z: batch_z})
                    samples.append(gen_samples)
                    _ = show_generator_output(sess, 25, input_z, image_channel, data_image_mode)
#         saver.save(sess, './checkpoints/generator.ckpt')
    
    return losses, samples
                

MNIST

在 MNIST 上测试你的 GANs 模型。经过 2 次迭代,GANs 应该能够生成类似手写数字的图像。确保生成器 (generator) 低于辨别器 (discriminator) 的损失,或接近 0。

In [59]:
batch_size = 64
z_dim = 100
learning_rate = 0.001
beta1 = 0.4


"""
DON'T MODIFY ANYTHING IN THIS CELL THAT IS BELOW THIS LINE
"""
epochs = 2

mnist_dataset = helper.Dataset('mnist', glob(os.path.join(data_dir, 'mnist/*.jpg')))
with tf.Graph().as_default():
    train(epochs, batch_size, z_dim, learning_rate, beta1, mnist_dataset.get_batches,
          mnist_dataset.shape, mnist_dataset.image_mode)
Epoch 1/2... Discriminator Loss: 1.8357... Generator Loss: 1.0776
Epoch 1/2... Discriminator Loss: 1.2686... Generator Loss: 0.9925
Epoch 1/2... Discriminator Loss: 1.3034... Generator Loss: 1.2101
Epoch 1/2... Discriminator Loss: 1.4834... Generator Loss: 0.8416
Epoch 1/2... Discriminator Loss: 1.5156... Generator Loss: 0.7740
Epoch 1/2... Discriminator Loss: 1.4200... Generator Loss: 1.1752
Epoch 1/2... Discriminator Loss: 1.4141... Generator Loss: 0.7792
Epoch 1/2... Discriminator Loss: 1.3668... Generator Loss: 1.1490
Epoch 1/2... Discriminator Loss: 1.3758... Generator Loss: 1.2540
Epoch 1/2... Discriminator Loss: 1.3286... Generator Loss: 0.8020
Epoch 1/2... Discriminator Loss: 1.3195... Generator Loss: 0.9925
Epoch 1/2... Discriminator Loss: 1.3176... Generator Loss: 0.9593
Epoch 1/2... Discriminator Loss: 1.3450... Generator Loss: 1.1890
Epoch 1/2... Discriminator Loss: 1.3330... Generator Loss: 1.1433
Epoch 1/2... Discriminator Loss: 1.2905... Generator Loss: 0.8077
Epoch 1/2... Discriminator Loss: 1.4165... Generator Loss: 0.7064
Epoch 1/2... Discriminator Loss: 1.3547... Generator Loss: 0.6961
Epoch 1/2... Discriminator Loss: 1.2521... Generator Loss: 1.2104
Epoch 1/2... Discriminator Loss: 1.2790... Generator Loss: 1.0085
Epoch 1/2... Discriminator Loss: 1.2972... Generator Loss: 0.9429
Epoch 1/2... Discriminator Loss: 1.3222... Generator Loss: 0.7665
Epoch 1/2... Discriminator Loss: 1.3269... Generator Loss: 0.7587
Epoch 1/2... Discriminator Loss: 1.3271... Generator Loss: 1.0074
Epoch 1/2... Discriminator Loss: 1.3619... Generator Loss: 0.8812
Epoch 1/2... Discriminator Loss: 1.3488... Generator Loss: 0.9864
Epoch 1/2... Discriminator Loss: 1.3714... Generator Loss: 1.0204
Epoch 1/2... Discriminator Loss: 1.2910... Generator Loss: 0.9614
Epoch 1/2... Discriminator Loss: 1.3451... Generator Loss: 1.1591
Epoch 1/2... Discriminator Loss: 1.3532... Generator Loss: 0.8306
Epoch 1/2... Discriminator Loss: 1.3253... Generator Loss: 1.0025
Epoch 1/2... Discriminator Loss: 1.2967... Generator Loss: 0.7113
Epoch 1/2... Discriminator Loss: 1.3146... Generator Loss: 0.8771
Epoch 1/2... Discriminator Loss: 1.2569... Generator Loss: 1.0892
Epoch 1/2... Discriminator Loss: 1.3193... Generator Loss: 0.9349
Epoch 1/2... Discriminator Loss: 1.4496... Generator Loss: 0.7165
Epoch 1/2... Discriminator Loss: 1.2976... Generator Loss: 1.0127
Epoch 1/2... Discriminator Loss: 1.3217... Generator Loss: 0.8693
Epoch 2/2... Discriminator Loss: 1.2863... Generator Loss: 1.0713
Epoch 2/2... Discriminator Loss: 1.3021... Generator Loss: 0.9001
Epoch 2/2... Discriminator Loss: 1.3431... Generator Loss: 0.8927
Epoch 2/2... Discriminator Loss: 1.3926... Generator Loss: 1.1131
Epoch 2/2... Discriminator Loss: 1.2691... Generator Loss: 1.0146
Epoch 2/2... Discriminator Loss: 1.3618... Generator Loss: 0.8167
Epoch 2/2... Discriminator Loss: 1.3326... Generator Loss: 0.8609
Epoch 2/2... Discriminator Loss: 1.3097... Generator Loss: 0.8303
Epoch 2/2... Discriminator Loss: 1.3572... Generator Loss: 0.9100
Epoch 2/2... Discriminator Loss: 1.3291... Generator Loss: 0.9612
Epoch 2/2... Discriminator Loss: 1.3335... Generator Loss: 0.9075
Epoch 2/2... Discriminator Loss: 1.2439... Generator Loss: 0.9234
Epoch 2/2... Discriminator Loss: 1.2771... Generator Loss: 1.1090
Epoch 2/2... Discriminator Loss: 1.2912... Generator Loss: 0.7858
Epoch 2/2... Discriminator Loss: 1.4066... Generator Loss: 1.1275
Epoch 2/2... Discriminator Loss: 1.3186... Generator Loss: 0.8821
Epoch 2/2... Discriminator Loss: 1.3272... Generator Loss: 0.8922
Epoch 2/2... Discriminator Loss: 1.3004... Generator Loss: 0.8621
Epoch 2/2... Discriminator Loss: 1.2967... Generator Loss: 0.8679
Epoch 2/2... Discriminator Loss: 1.3028... Generator Loss: 0.9085
Epoch 2/2... Discriminator Loss: 1.3144... Generator Loss: 0.8595
Epoch 2/2... Discriminator Loss: 1.3095... Generator Loss: 0.8782
Epoch 2/2... Discriminator Loss: 1.2743... Generator Loss: 0.9787
Epoch 2/2... Discriminator Loss: 1.2861... Generator Loss: 1.0933
Epoch 2/2... Discriminator Loss: 1.2470... Generator Loss: 0.9064
Epoch 2/2... Discriminator Loss: 1.2884... Generator Loss: 1.0144
Epoch 2/2... Discriminator Loss: 1.2779... Generator Loss: 1.0776
Epoch 2/2... Discriminator Loss: 1.3096... Generator Loss: 0.9436
Epoch 2/2... Discriminator Loss: 1.2720... Generator Loss: 0.8347
Epoch 2/2... Discriminator Loss: 1.2876... Generator Loss: 0.9709
Epoch 2/2... Discriminator Loss: 1.3143... Generator Loss: 0.9138
Epoch 2/2... Discriminator Loss: 1.3043... Generator Loss: 0.9272
Epoch 2/2... Discriminator Loss: 1.2429... Generator Loss: 1.0236
Epoch 2/2... Discriminator Loss: 1.3465... Generator Loss: 0.8006
Epoch 2/2... Discriminator Loss: 1.3422... Generator Loss: 0.9687
Epoch 2/2... Discriminator Loss: 1.2932... Generator Loss: 0.8860
Epoch 2/2... Discriminator Loss: 1.4030... Generator Loss: 1.0935

CelebA

在 CelebA 上运行你的 GANs 模型。在一般的GPU上运行每次迭代大约需要 20 分钟。你可以运行整个迭代,或者当 GANs 开始产生真实人脸图像时停止它。

In [60]:
batch_size = 32
z_dim = 100
learning_rate = 0.002
beta1 = 0.4


"""
DON'T MODIFY ANYTHING IN THIS CELL THAT IS BELOW THIS LINE
"""
epochs = 2

celeba_dataset = helper.Dataset('celeba', glob(os.path.join(data_dir, 'img_align_celeba/*.jpg')))
with tf.Graph().as_default():
    train(epochs, batch_size, z_dim, learning_rate, beta1, celeba_dataset.get_batches,
          celeba_dataset.shape, celeba_dataset.image_mode)
Epoch 1/2... Discriminator Loss: 1.9608... Generator Loss: 0.5755
Epoch 1/2... Discriminator Loss: 1.2873... Generator Loss: 1.0333
Epoch 1/2... Discriminator Loss: 1.5352... Generator Loss: 4.1477
Epoch 1/2... Discriminator Loss: 1.4018... Generator Loss: 2.3233
Epoch 1/2... Discriminator Loss: 1.0415... Generator Loss: 1.0840
Epoch 1/2... Discriminator Loss: 1.2446... Generator Loss: 0.9731
Epoch 1/2... Discriminator Loss: 1.2972... Generator Loss: 0.8386
Epoch 1/2... Discriminator Loss: 1.7571... Generator Loss: 2.0468
Epoch 1/2... Discriminator Loss: 1.0215... Generator Loss: 1.2828
Epoch 1/2... Discriminator Loss: 1.6445... Generator Loss: 1.0383
Epoch 1/2... Discriminator Loss: 1.6476... Generator Loss: 0.5456
Epoch 1/2... Discriminator Loss: 1.2801... Generator Loss: 0.8396
Epoch 1/2... Discriminator Loss: 1.2816... Generator Loss: 1.2211
Epoch 1/2... Discriminator Loss: 1.4062... Generator Loss: 0.7657
Epoch 1/2... Discriminator Loss: 1.5042... Generator Loss: 1.0019
Epoch 1/2... Discriminator Loss: 1.5127... Generator Loss: 1.1901
Epoch 1/2... Discriminator Loss: 1.2941... Generator Loss: 0.9588
Epoch 1/2... Discriminator Loss: 1.4503... Generator Loss: 1.2134
Epoch 1/2... Discriminator Loss: 1.3410... Generator Loss: 0.8838
Epoch 1/2... Discriminator Loss: 1.3484... Generator Loss: 0.8255
Epoch 1/2... Discriminator Loss: 1.4905... Generator Loss: 0.6128
Epoch 1/2... Discriminator Loss: 1.4111... Generator Loss: 0.9587
Epoch 1/2... Discriminator Loss: 1.3617... Generator Loss: 0.9322
Epoch 1/2... Discriminator Loss: 1.4211... Generator Loss: 0.7827
Epoch 1/2... Discriminator Loss: 1.3417... Generator Loss: 0.8582
Epoch 1/2... Discriminator Loss: 1.4916... Generator Loss: 1.2612
Epoch 1/2... Discriminator Loss: 1.4863... Generator Loss: 0.8574
Epoch 1/2... Discriminator Loss: 1.3055... Generator Loss: 0.9491
Epoch 1/2... Discriminator Loss: 1.3741... Generator Loss: 1.0310
Epoch 1/2... Discriminator Loss: 1.3951... Generator Loss: 1.0407
Epoch 1/2... Discriminator Loss: 1.3601... Generator Loss: 1.0876
Epoch 1/2... Discriminator Loss: 1.4158... Generator Loss: 0.8444
Epoch 1/2... Discriminator Loss: 1.3517... Generator Loss: 0.9691
Epoch 1/2... Discriminator Loss: 1.3464... Generator Loss: 0.8818
Epoch 1/2... Discriminator Loss: 1.3038... Generator Loss: 0.8561
Epoch 1/2... Discriminator Loss: 1.4403... Generator Loss: 0.8275
Epoch 1/2... Discriminator Loss: 1.3039... Generator Loss: 0.8499
Epoch 1/2... Discriminator Loss: 1.3070... Generator Loss: 0.9046
Epoch 1/2... Discriminator Loss: 1.3770... Generator Loss: 0.8251
Epoch 1/2... Discriminator Loss: 1.3650... Generator Loss: 0.9449
Epoch 1/2... Discriminator Loss: 1.4153... Generator Loss: 0.9214
Epoch 1/2... Discriminator Loss: 1.5328... Generator Loss: 0.8351
Epoch 1/2... Discriminator Loss: 1.4599... Generator Loss: 0.7207
Epoch 1/2... Discriminator Loss: 1.3584... Generator Loss: 0.8750
Epoch 1/2... Discriminator Loss: 1.3684... Generator Loss: 0.9041
Epoch 1/2... Discriminator Loss: 1.3420... Generator Loss: 0.7569
Epoch 1/2... Discriminator Loss: 1.3904... Generator Loss: 0.7112
Epoch 1/2... Discriminator Loss: 1.3768... Generator Loss: 0.9176
Epoch 1/2... Discriminator Loss: 1.3381... Generator Loss: 0.8421
Epoch 1/2... Discriminator Loss: 1.3350... Generator Loss: 0.8661
Epoch 1/2... Discriminator Loss: 1.2672... Generator Loss: 0.9349
Epoch 1/2... Discriminator Loss: 1.3278... Generator Loss: 0.8452
Epoch 1/2... Discriminator Loss: 1.2986... Generator Loss: 0.9190
Epoch 1/2... Discriminator Loss: 1.4226... Generator Loss: 0.8312
Epoch 1/2... Discriminator Loss: 1.3145... Generator Loss: 0.8715
Epoch 1/2... Discriminator Loss: 1.3961... Generator Loss: 0.9180
Epoch 1/2... Discriminator Loss: 1.3320... Generator Loss: 0.8053
Epoch 1/2... Discriminator Loss: 1.3641... Generator Loss: 0.8164
Epoch 1/2... Discriminator Loss: 1.3820... Generator Loss: 0.9059
Epoch 1/2... Discriminator Loss: 1.3112... Generator Loss: 0.9801
Epoch 1/2... Discriminator Loss: 1.3527... Generator Loss: 0.8538
Epoch 1/2... Discriminator Loss: 1.3498... Generator Loss: 0.8421
Epoch 1/2... Discriminator Loss: 1.3719... Generator Loss: 0.9448
Epoch 1/2... Discriminator Loss: 1.3823... Generator Loss: 0.9501
Epoch 1/2... Discriminator Loss: 1.3090... Generator Loss: 0.9645
Epoch 1/2... Discriminator Loss: 1.3268... Generator Loss: 0.8744
Epoch 1/2... Discriminator Loss: 1.4065... Generator Loss: 0.8446
Epoch 1/2... Discriminator Loss: 1.3891... Generator Loss: 0.8786
Epoch 1/2... Discriminator Loss: 1.3394... Generator Loss: 0.8649
Epoch 1/2... Discriminator Loss: 1.3261... Generator Loss: 0.9303
Epoch 1/2... Discriminator Loss: 1.2595... Generator Loss: 0.9591
Epoch 1/2... Discriminator Loss: 1.3323... Generator Loss: 0.9249
Epoch 1/2... Discriminator Loss: 1.2739... Generator Loss: 0.9128
Epoch 1/2... Discriminator Loss: 1.3228... Generator Loss: 0.8180
Epoch 1/2... Discriminator Loss: 1.3672... Generator Loss: 0.8083
Epoch 1/2... Discriminator Loss: 1.3045... Generator Loss: 1.0086
Epoch 1/2... Discriminator Loss: 1.3648... Generator Loss: 0.7108
Epoch 1/2... Discriminator Loss: 1.4230... Generator Loss: 0.8206
Epoch 1/2... Discriminator Loss: 1.2925... Generator Loss: 0.8215
Epoch 1/2... Discriminator Loss: 1.3988... Generator Loss: 0.8645
Epoch 1/2... Discriminator Loss: 1.4183... Generator Loss: 0.8665
Epoch 1/2... Discriminator Loss: 1.2431... Generator Loss: 0.8421
Epoch 1/2... Discriminator Loss: 1.4358... Generator Loss: 0.7748
Epoch 1/2... Discriminator Loss: 1.3421... Generator Loss: 0.8159
Epoch 1/2... Discriminator Loss: 1.3390... Generator Loss: 0.9256
Epoch 1/2... Discriminator Loss: 1.3627... Generator Loss: 0.8082
Epoch 1/2... Discriminator Loss: 1.3277... Generator Loss: 0.8304
Epoch 1/2... Discriminator Loss: 1.3422... Generator Loss: 0.8464
Epoch 1/2... Discriminator Loss: 1.2893... Generator Loss: 0.9747
Epoch 1/2... Discriminator Loss: 1.3006... Generator Loss: 0.9135
Epoch 1/2... Discriminator Loss: 1.3249... Generator Loss: 0.9542
Epoch 1/2... Discriminator Loss: 1.3840... Generator Loss: 0.7810
Epoch 1/2... Discriminator Loss: 1.3460... Generator Loss: 0.8502
Epoch 1/2... Discriminator Loss: 1.2772... Generator Loss: 0.9072
Epoch 1/2... Discriminator Loss: 1.2712... Generator Loss: 1.0795
Epoch 1/2... Discriminator Loss: 1.3056... Generator Loss: 0.8536
Epoch 1/2... Discriminator Loss: 1.2422... Generator Loss: 0.9577
Epoch 1/2... Discriminator Loss: 1.3090... Generator Loss: 0.7688
Epoch 1/2... Discriminator Loss: 1.3442... Generator Loss: 0.8734
Epoch 1/2... Discriminator Loss: 1.3135... Generator Loss: 0.9184
Epoch 1/2... Discriminator Loss: 1.3910... Generator Loss: 0.8104
Epoch 1/2... Discriminator Loss: 1.3802... Generator Loss: 0.8868
Epoch 1/2... Discriminator Loss: 1.3310... Generator Loss: 0.7983
Epoch 1/2... Discriminator Loss: 1.3541... Generator Loss: 0.7511
Epoch 1/2... Discriminator Loss: 1.3500... Generator Loss: 0.8240
Epoch 1/2... Discriminator Loss: 1.3259... Generator Loss: 0.9086
Epoch 1/2... Discriminator Loss: 1.3463... Generator Loss: 0.8458
Epoch 1/2... Discriminator Loss: 1.3042... Generator Loss: 0.8793
Epoch 1/2... Discriminator Loss: 1.3004... Generator Loss: 0.8769
Epoch 1/2... Discriminator Loss: 1.2770... Generator Loss: 0.9839
Epoch 1/2... Discriminator Loss: 1.3519... Generator Loss: 0.8763
Epoch 1/2... Discriminator Loss: 1.2588... Generator Loss: 0.8799
Epoch 1/2... Discriminator Loss: 1.3389... Generator Loss: 0.8202
Epoch 1/2... Discriminator Loss: 1.3383... Generator Loss: 0.7596
Epoch 1/2... Discriminator Loss: 1.3115... Generator Loss: 0.7804
Epoch 1/2... Discriminator Loss: 1.3603... Generator Loss: 0.9339
Epoch 1/2... Discriminator Loss: 1.2987... Generator Loss: 0.8481
Epoch 1/2... Discriminator Loss: 1.3459... Generator Loss: 0.9111
Epoch 1/2... Discriminator Loss: 1.3555... Generator Loss: 0.8019
Epoch 1/2... Discriminator Loss: 1.3550... Generator Loss: 0.8493
Epoch 1/2... Discriminator Loss: 1.3484... Generator Loss: 0.8263
Epoch 1/2... Discriminator Loss: 1.3015... Generator Loss: 0.9091
Epoch 1/2... Discriminator Loss: 1.3247... Generator Loss: 0.9011
Epoch 1/2... Discriminator Loss: 1.3694... Generator Loss: 0.8090
Epoch 1/2... Discriminator Loss: 1.2938... Generator Loss: 0.8647
Epoch 1/2... Discriminator Loss: 1.3336... Generator Loss: 0.8080
Epoch 1/2... Discriminator Loss: 1.3585... Generator Loss: 0.8791
Epoch 1/2... Discriminator Loss: 1.3321... Generator Loss: 0.7923
Epoch 1/2... Discriminator Loss: 1.3497... Generator Loss: 0.9853
Epoch 1/2... Discriminator Loss: 1.3140... Generator Loss: 0.7696
Epoch 1/2... Discriminator Loss: 1.3544... Generator Loss: 0.8194
Epoch 1/2... Discriminator Loss: 1.3644... Generator Loss: 0.8600
Epoch 1/2... Discriminator Loss: 1.2477... Generator Loss: 0.9175
Epoch 1/2... Discriminator Loss: 1.3711... Generator Loss: 0.7421
Epoch 1/2... Discriminator Loss: 1.3178... Generator Loss: 0.7987
Epoch 1/2... Discriminator Loss: 1.3676... Generator Loss: 0.7881
Epoch 1/2... Discriminator Loss: 1.2912... Generator Loss: 0.8909
Epoch 1/2... Discriminator Loss: 1.3340... Generator Loss: 0.9005
Epoch 1/2... Discriminator Loss: 1.3389... Generator Loss: 0.8105
Epoch 1/2... Discriminator Loss: 1.3287... Generator Loss: 1.0800
Epoch 1/2... Discriminator Loss: 1.3188... Generator Loss: 0.9212
Epoch 1/2... Discriminator Loss: 1.4176... Generator Loss: 0.7653
Epoch 1/2... Discriminator Loss: 1.3282... Generator Loss: 0.7734
Epoch 1/2... Discriminator Loss: 1.2839... Generator Loss: 0.9317
Epoch 1/2... Discriminator Loss: 1.3807... Generator Loss: 0.7934
Epoch 1/2... Discriminator Loss: 1.3595... Generator Loss: 0.8655
Epoch 1/2... Discriminator Loss: 1.3459... Generator Loss: 0.9002
Epoch 1/2... Discriminator Loss: 1.3832... Generator Loss: 0.9116
Epoch 1/2... Discriminator Loss: 1.4187... Generator Loss: 0.7368
Epoch 1/2... Discriminator Loss: 1.3037... Generator Loss: 0.9263
Epoch 1/2... Discriminator Loss: 1.3246... Generator Loss: 0.7890
Epoch 1/2... Discriminator Loss: 1.3207... Generator Loss: 0.8739
Epoch 1/2... Discriminator Loss: 1.3518... Generator Loss: 0.7979
Epoch 1/2... Discriminator Loss: 1.2730... Generator Loss: 0.9243
Epoch 1/2... Discriminator Loss: 1.3677... Generator Loss: 0.8494
Epoch 1/2... Discriminator Loss: 1.3185... Generator Loss: 0.9386
Epoch 1/2... Discriminator Loss: 1.3857... Generator Loss: 0.8899
Epoch 1/2... Discriminator Loss: 1.3202... Generator Loss: 0.8721
Epoch 1/2... Discriminator Loss: 1.3160... Generator Loss: 0.8676
Epoch 1/2... Discriminator Loss: 1.3171... Generator Loss: 0.8961
Epoch 1/2... Discriminator Loss: 1.2858... Generator Loss: 0.8534
Epoch 1/2... Discriminator Loss: 1.3445... Generator Loss: 0.8698
Epoch 1/2... Discriminator Loss: 1.3601... Generator Loss: 0.9112
Epoch 1/2... Discriminator Loss: 1.4054... Generator Loss: 0.8400
Epoch 1/2... Discriminator Loss: 1.3492... Generator Loss: 0.8916
Epoch 1/2... Discriminator Loss: 1.2981... Generator Loss: 0.8423
Epoch 1/2... Discriminator Loss: 1.3498... Generator Loss: 0.9400
Epoch 1/2... Discriminator Loss: 1.3764... Generator Loss: 0.8378
Epoch 1/2... Discriminator Loss: 1.3736... Generator Loss: 0.9182
Epoch 1/2... Discriminator Loss: 1.3621... Generator Loss: 0.8904
Epoch 1/2... Discriminator Loss: 1.3679... Generator Loss: 0.8530
Epoch 1/2... Discriminator Loss: 1.3093... Generator Loss: 0.8468
Epoch 1/2... Discriminator Loss: 1.3756... Generator Loss: 0.8347
Epoch 1/2... Discriminator Loss: 1.4145... Generator Loss: 0.8306
Epoch 1/2... Discriminator Loss: 1.4258... Generator Loss: 0.7938
Epoch 1/2... Discriminator Loss: 1.3330... Generator Loss: 0.8466
Epoch 1/2... Discriminator Loss: 1.2900... Generator Loss: 0.9498
Epoch 1/2... Discriminator Loss: 1.3354... Generator Loss: 0.7888
Epoch 1/2... Discriminator Loss: 1.3056... Generator Loss: 0.8920
Epoch 1/2... Discriminator Loss: 1.3308... Generator Loss: 0.8896
Epoch 1/2... Discriminator Loss: 1.2666... Generator Loss: 0.9398
Epoch 1/2... Discriminator Loss: 1.2854... Generator Loss: 0.8470
Epoch 1/2... Discriminator Loss: 1.3527... Generator Loss: 0.8711
Epoch 1/2... Discriminator Loss: 1.2569... Generator Loss: 1.0016
Epoch 1/2... Discriminator Loss: 1.2967... Generator Loss: 0.7826
Epoch 1/2... Discriminator Loss: 1.3649... Generator Loss: 0.8533
Epoch 1/2... Discriminator Loss: 1.3189... Generator Loss: 0.7932
Epoch 1/2... Discriminator Loss: 1.3301... Generator Loss: 0.7624
Epoch 1/2... Discriminator Loss: 1.3281... Generator Loss: 0.8833
Epoch 1/2... Discriminator Loss: 1.2909... Generator Loss: 0.9209
Epoch 1/2... Discriminator Loss: 1.3886... Generator Loss: 0.8637
Epoch 1/2... Discriminator Loss: 1.3249... Generator Loss: 0.9769
Epoch 1/2... Discriminator Loss: 1.3376... Generator Loss: 0.7878
Epoch 1/2... Discriminator Loss: 1.3254... Generator Loss: 0.9349
Epoch 1/2... Discriminator Loss: 1.3349... Generator Loss: 0.8474
Epoch 1/2... Discriminator Loss: 1.3902... Generator Loss: 0.8473
Epoch 1/2... Discriminator Loss: 1.3299... Generator Loss: 0.9006
Epoch 1/2... Discriminator Loss: 1.3726... Generator Loss: 0.8502
Epoch 1/2... Discriminator Loss: 1.3367... Generator Loss: 0.7796
Epoch 1/2... Discriminator Loss: 1.3210... Generator Loss: 0.8862
Epoch 1/2... Discriminator Loss: 1.3352... Generator Loss: 0.8373
Epoch 1/2... Discriminator Loss: 1.4199... Generator Loss: 0.8456
Epoch 1/2... Discriminator Loss: 1.2727... Generator Loss: 0.8579
Epoch 1/2... Discriminator Loss: 1.3338... Generator Loss: 0.8502
Epoch 1/2... Discriminator Loss: 1.3095... Generator Loss: 0.8074
Epoch 1/2... Discriminator Loss: 1.3462... Generator Loss: 0.7626
Epoch 1/2... Discriminator Loss: 1.3685... Generator Loss: 0.8165
Epoch 1/2... Discriminator Loss: 1.4208... Generator Loss: 0.8868
Epoch 1/2... Discriminator Loss: 1.4059... Generator Loss: 0.8240
Epoch 1/2... Discriminator Loss: 1.2915... Generator Loss: 0.8917
Epoch 1/2... Discriminator Loss: 1.3022... Generator Loss: 0.9065
Epoch 1/2... Discriminator Loss: 1.3489... Generator Loss: 0.8702
Epoch 1/2... Discriminator Loss: 1.3550... Generator Loss: 0.8288
Epoch 1/2... Discriminator Loss: 1.3866... Generator Loss: 0.9267
Epoch 1/2... Discriminator Loss: 1.3595... Generator Loss: 0.8087
Epoch 1/2... Discriminator Loss: 1.2220... Generator Loss: 0.9113
Epoch 1/2... Discriminator Loss: 1.3062... Generator Loss: 0.8405
Epoch 1/2... Discriminator Loss: 1.3450... Generator Loss: 0.8101
Epoch 1/2... Discriminator Loss: 1.3294... Generator Loss: 0.8019
Epoch 1/2... Discriminator Loss: 1.3555... Generator Loss: 0.8802
Epoch 1/2... Discriminator Loss: 1.3620... Generator Loss: 0.9059
Epoch 1/2... Discriminator Loss: 1.3468... Generator Loss: 0.8221
Epoch 1/2... Discriminator Loss: 1.3476... Generator Loss: 0.8706
Epoch 1/2... Discriminator Loss: 1.3620... Generator Loss: 0.8198
Epoch 1/2... Discriminator Loss: 1.3756... Generator Loss: 0.9014
Epoch 1/2... Discriminator Loss: 1.3234... Generator Loss: 0.7970
Epoch 1/2... Discriminator Loss: 1.3544... Generator Loss: 0.8955
Epoch 1/2... Discriminator Loss: 1.3427... Generator Loss: 0.9501
Epoch 1/2... Discriminator Loss: 1.3631... Generator Loss: 0.8360
Epoch 1/2... Discriminator Loss: 1.3380... Generator Loss: 0.8073
Epoch 1/2... Discriminator Loss: 1.3203... Generator Loss: 0.8010
Epoch 1/2... Discriminator Loss: 1.2878... Generator Loss: 0.7480
Epoch 1/2... Discriminator Loss: 1.4029... Generator Loss: 0.7198
Epoch 1/2... Discriminator Loss: 1.3596... Generator Loss: 0.8831
Epoch 1/2... Discriminator Loss: 1.3187... Generator Loss: 0.9552
Epoch 1/2... Discriminator Loss: 1.2925... Generator Loss: 0.8327
Epoch 1/2... Discriminator Loss: 1.4177... Generator Loss: 0.8011
Epoch 1/2... Discriminator Loss: 1.3476... Generator Loss: 0.9324
Epoch 1/2... Discriminator Loss: 1.3118... Generator Loss: 1.0027
Epoch 1/2... Discriminator Loss: 1.2927... Generator Loss: 0.7983
Epoch 1/2... Discriminator Loss: 1.3419... Generator Loss: 0.7925
Epoch 1/2... Discriminator Loss: 1.3615... Generator Loss: 0.8634
Epoch 1/2... Discriminator Loss: 1.3025... Generator Loss: 0.8006
Epoch 1/2... Discriminator Loss: 1.3703... Generator Loss: 0.7929
Epoch 1/2... Discriminator Loss: 1.2886... Generator Loss: 0.9914
Epoch 1/2... Discriminator Loss: 1.3454... Generator Loss: 0.8612
Epoch 1/2... Discriminator Loss: 1.3112... Generator Loss: 0.9427
Epoch 1/2... Discriminator Loss: 1.3291... Generator Loss: 0.9313
Epoch 1/2... Discriminator Loss: 1.4025... Generator Loss: 0.7939
Epoch 1/2... Discriminator Loss: 1.2965... Generator Loss: 0.8052
Epoch 1/2... Discriminator Loss: 1.3085... Generator Loss: 0.9026
Epoch 1/2... Discriminator Loss: 1.3296... Generator Loss: 0.8706
Epoch 1/2... Discriminator Loss: 1.3063... Generator Loss: 0.8586
Epoch 2/2... Discriminator Loss: 1.3835... Generator Loss: 0.7788
Epoch 2/2... Discriminator Loss: 1.3095... Generator Loss: 0.8917
Epoch 2/2... Discriminator Loss: 1.3173... Generator Loss: 0.7669
Epoch 2/2... Discriminator Loss: 1.3802... Generator Loss: 0.8069
Epoch 2/2... Discriminator Loss: 1.3358... Generator Loss: 0.8253
Epoch 2/2... Discriminator Loss: 1.3683... Generator Loss: 0.9244
Epoch 2/2... Discriminator Loss: 1.3455... Generator Loss: 0.7964
Epoch 2/2... Discriminator Loss: 1.3312... Generator Loss: 0.8882
Epoch 2/2... Discriminator Loss: 1.2916... Generator Loss: 0.9759
Epoch 2/2... Discriminator Loss: 1.2798... Generator Loss: 0.8219
Epoch 2/2... Discriminator Loss: 1.3819... Generator Loss: 0.9356
Epoch 2/2... Discriminator Loss: 1.4300... Generator Loss: 0.7880
Epoch 2/2... Discriminator Loss: 1.3366... Generator Loss: 0.8658
Epoch 2/2... Discriminator Loss: 1.3370... Generator Loss: 1.0100
Epoch 2/2... Discriminator Loss: 1.3877... Generator Loss: 0.9156
Epoch 2/2... Discriminator Loss: 1.3569... Generator Loss: 0.7492
Epoch 2/2... Discriminator Loss: 1.3326... Generator Loss: 0.8855
Epoch 2/2... Discriminator Loss: 1.3505... Generator Loss: 0.8817
Epoch 2/2... Discriminator Loss: 1.3112... Generator Loss: 0.8168
Epoch 2/2... Discriminator Loss: 1.3595... Generator Loss: 0.9544
Epoch 2/2... Discriminator Loss: 1.3405... Generator Loss: 0.8345
Epoch 2/2... Discriminator Loss: 1.2998... Generator Loss: 0.8692
Epoch 2/2... Discriminator Loss: 1.3061... Generator Loss: 0.9274
Epoch 2/2... Discriminator Loss: 1.3105... Generator Loss: 0.8654
Epoch 2/2... Discriminator Loss: 1.3776... Generator Loss: 0.9162
Epoch 2/2... Discriminator Loss: 1.2954... Generator Loss: 0.8649
Epoch 2/2... Discriminator Loss: 1.3122... Generator Loss: 0.8809
Epoch 2/2... Discriminator Loss: 1.3199... Generator Loss: 0.9623
Epoch 2/2... Discriminator Loss: 1.3512... Generator Loss: 0.9068
Epoch 2/2... Discriminator Loss: 1.3649... Generator Loss: 0.8552
Epoch 2/2... Discriminator Loss: 1.2503... Generator Loss: 0.9470
Epoch 2/2... Discriminator Loss: 1.3376... Generator Loss: 0.8636
Epoch 2/2... Discriminator Loss: 1.3479... Generator Loss: 0.9198
Epoch 2/2... Discriminator Loss: 1.3749... Generator Loss: 0.8650
Epoch 2/2... Discriminator Loss: 1.3723... Generator Loss: 0.8371
Epoch 2/2... Discriminator Loss: 1.3298... Generator Loss: 0.7791
Epoch 2/2... Discriminator Loss: 1.3182... Generator Loss: 0.9045
Epoch 2/2... Discriminator Loss: 1.3301... Generator Loss: 0.8353
Epoch 2/2... Discriminator Loss: 1.3725... Generator Loss: 0.8149
Epoch 2/2... Discriminator Loss: 1.4059... Generator Loss: 0.7795
Epoch 2/2... Discriminator Loss: 1.3774... Generator Loss: 0.9591
Epoch 2/2... Discriminator Loss: 1.3151... Generator Loss: 0.8332
Epoch 2/2... Discriminator Loss: 1.3188... Generator Loss: 0.8889
Epoch 2/2... Discriminator Loss: 1.3433... Generator Loss: 0.8993
Epoch 2/2... Discriminator Loss: 1.2665... Generator Loss: 0.9299
Epoch 2/2... Discriminator Loss: 1.3488... Generator Loss: 0.8569
Epoch 2/2... Discriminator Loss: 1.2900... Generator Loss: 0.9153
Epoch 2/2... Discriminator Loss: 1.2922... Generator Loss: 0.9378
Epoch 2/2... Discriminator Loss: 1.3232... Generator Loss: 0.8166
Epoch 2/2... Discriminator Loss: 1.2997... Generator Loss: 0.8730
Epoch 2/2... Discriminator Loss: 1.3125... Generator Loss: 0.8628
Epoch 2/2... Discriminator Loss: 1.3265... Generator Loss: 0.8569
Epoch 2/2... Discriminator Loss: 1.3263... Generator Loss: 1.0053
Epoch 2/2... Discriminator Loss: 1.3538... Generator Loss: 0.9240
Epoch 2/2... Discriminator Loss: 1.3386... Generator Loss: 0.8236
Epoch 2/2... Discriminator Loss: 1.3500... Generator Loss: 0.7589
Epoch 2/2... Discriminator Loss: 1.3307... Generator Loss: 0.8428
Epoch 2/2... Discriminator Loss: 1.2479... Generator Loss: 0.8721
Epoch 2/2... Discriminator Loss: 1.3226... Generator Loss: 0.8265
Epoch 2/2... Discriminator Loss: 1.3436... Generator Loss: 0.9286
Epoch 2/2... Discriminator Loss: 1.3746... Generator Loss: 0.9168
Epoch 2/2... Discriminator Loss: 1.3152... Generator Loss: 0.8528
Epoch 2/2... Discriminator Loss: 1.2957... Generator Loss: 0.9286
Epoch 2/2... Discriminator Loss: 1.3533... Generator Loss: 0.9683
Epoch 2/2... Discriminator Loss: 1.2749... Generator Loss: 1.0319
Epoch 2/2... Discriminator Loss: 1.2707... Generator Loss: 0.8166
Epoch 2/2... Discriminator Loss: 1.3403... Generator Loss: 0.8551
Epoch 2/2... Discriminator Loss: 1.3516... Generator Loss: 0.9047
Epoch 2/2... Discriminator Loss: 1.2874... Generator Loss: 0.9576
Epoch 2/2... Discriminator Loss: 1.4035... Generator Loss: 0.8557
Epoch 2/2... Discriminator Loss: 1.3141... Generator Loss: 0.9438
Epoch 2/2... Discriminator Loss: 1.3680... Generator Loss: 1.0039
Epoch 2/2... Discriminator Loss: 1.3550... Generator Loss: 0.8257
Epoch 2/2... Discriminator Loss: 1.3181... Generator Loss: 0.8317
Epoch 2/2... Discriminator Loss: 1.3222... Generator Loss: 0.9356
Epoch 2/2... Discriminator Loss: 1.3453... Generator Loss: 1.0424
Epoch 2/2... Discriminator Loss: 1.2781... Generator Loss: 0.9559
Epoch 2/2... Discriminator Loss: 1.3409... Generator Loss: 0.9098
Epoch 2/2... Discriminator Loss: 1.3803... Generator Loss: 0.8377
Epoch 2/2... Discriminator Loss: 1.2807... Generator Loss: 0.8545
Epoch 2/2... Discriminator Loss: 1.2993... Generator Loss: 0.9040
Epoch 2/2... Discriminator Loss: 1.4161... Generator Loss: 0.8036
Epoch 2/2... Discriminator Loss: 1.3508... Generator Loss: 0.8419
Epoch 2/2... Discriminator Loss: 1.2976... Generator Loss: 0.9250
Epoch 2/2... Discriminator Loss: 1.3093... Generator Loss: 0.9279
Epoch 2/2... Discriminator Loss: 1.3399... Generator Loss: 0.8505
Epoch 2/2... Discriminator Loss: 1.3350... Generator Loss: 0.9316
Epoch 2/2... Discriminator Loss: 1.3142... Generator Loss: 0.8835
Epoch 2/2... Discriminator Loss: 1.2730... Generator Loss: 0.9497
Epoch 2/2... Discriminator Loss: 1.2993... Generator Loss: 0.9303
Epoch 2/2... Discriminator Loss: 1.3552... Generator Loss: 0.8083
Epoch 2/2... Discriminator Loss: 1.3499... Generator Loss: 0.8741
Epoch 2/2... Discriminator Loss: 1.3432... Generator Loss: 0.8362
Epoch 2/2... Discriminator Loss: 1.3322... Generator Loss: 0.8701
Epoch 2/2... Discriminator Loss: 1.3306... Generator Loss: 0.7911
Epoch 2/2... Discriminator Loss: 1.2868... Generator Loss: 0.9711
Epoch 2/2... Discriminator Loss: 1.2804... Generator Loss: 1.0641
Epoch 2/2... Discriminator Loss: 1.3212... Generator Loss: 0.9431
Epoch 2/2... Discriminator Loss: 1.3082... Generator Loss: 0.9481
Epoch 2/2... Discriminator Loss: 1.3830... Generator Loss: 0.8478
Epoch 2/2... Discriminator Loss: 1.4226... Generator Loss: 0.8479
Epoch 2/2... Discriminator Loss: 1.3124... Generator Loss: 0.7948
Epoch 2/2... Discriminator Loss: 1.3538... Generator Loss: 0.8261
Epoch 2/2... Discriminator Loss: 1.2896... Generator Loss: 0.9339
Epoch 2/2... Discriminator Loss: 1.3038... Generator Loss: 0.9401
Epoch 2/2... Discriminator Loss: 1.3254... Generator Loss: 0.8369
Epoch 2/2... Discriminator Loss: 1.3027... Generator Loss: 0.7394
Epoch 2/2... Discriminator Loss: 1.3163... Generator Loss: 0.9930
Epoch 2/2... Discriminator Loss: 1.3383... Generator Loss: 0.8589
Epoch 2/2... Discriminator Loss: 1.2892... Generator Loss: 0.9018
Epoch 2/2... Discriminator Loss: 1.3018... Generator Loss: 0.9482
Epoch 2/2... Discriminator Loss: 1.2796... Generator Loss: 0.7023
Epoch 2/2... Discriminator Loss: 1.3238... Generator Loss: 0.8903
Epoch 2/2... Discriminator Loss: 1.2377... Generator Loss: 0.9673
Epoch 2/2... Discriminator Loss: 1.3377... Generator Loss: 0.8840
Epoch 2/2... Discriminator Loss: 1.3074... Generator Loss: 0.8892
Epoch 2/2... Discriminator Loss: 1.2843... Generator Loss: 0.9827
Epoch 2/2... Discriminator Loss: 1.2823... Generator Loss: 0.7429
Epoch 2/2... Discriminator Loss: 1.3105... Generator Loss: 0.8471
Epoch 2/2... Discriminator Loss: 1.3253... Generator Loss: 0.9202
Epoch 2/2... Discriminator Loss: 1.3119... Generator Loss: 0.9276
Epoch 2/2... Discriminator Loss: 1.3191... Generator Loss: 0.9123
Epoch 2/2... Discriminator Loss: 1.4035... Generator Loss: 0.8963
Epoch 2/2... Discriminator Loss: 1.3184... Generator Loss: 0.8624
Epoch 2/2... Discriminator Loss: 1.3591... Generator Loss: 0.8573
Epoch 2/2... Discriminator Loss: 1.3254... Generator Loss: 0.7903
Epoch 2/2... Discriminator Loss: 1.3515... Generator Loss: 0.7987
Epoch 2/2... Discriminator Loss: 1.2752... Generator Loss: 0.9566
Epoch 2/2... Discriminator Loss: 1.2971... Generator Loss: 0.9689
Epoch 2/2... Discriminator Loss: 1.2343... Generator Loss: 0.9753
Epoch 2/2... Discriminator Loss: 1.3011... Generator Loss: 0.8706
Epoch 2/2... Discriminator Loss: 1.3153... Generator Loss: 0.8035
Epoch 2/2... Discriminator Loss: 1.2938... Generator Loss: 0.8264
Epoch 2/2... Discriminator Loss: 1.3622... Generator Loss: 0.8648
Epoch 2/2... Discriminator Loss: 1.2919... Generator Loss: 1.0104
Epoch 2/2... Discriminator Loss: 1.4080... Generator Loss: 0.7984
Epoch 2/2... Discriminator Loss: 1.2989... Generator Loss: 0.9192
Epoch 2/2... Discriminator Loss: 1.2688... Generator Loss: 0.8839
Epoch 2/2... Discriminator Loss: 1.3015... Generator Loss: 0.8705
Epoch 2/2... Discriminator Loss: 1.3666... Generator Loss: 0.7967
Epoch 2/2... Discriminator Loss: 1.3603... Generator Loss: 0.8969
Epoch 2/2... Discriminator Loss: 1.3144... Generator Loss: 0.8492
Epoch 2/2... Discriminator Loss: 1.2456... Generator Loss: 0.8398
Epoch 2/2... Discriminator Loss: 1.3597... Generator Loss: 0.8861
Epoch 2/2... Discriminator Loss: 1.3309... Generator Loss: 0.8024
Epoch 2/2... Discriminator Loss: 1.4297... Generator Loss: 0.8697
Epoch 2/2... Discriminator Loss: 1.3462... Generator Loss: 0.8266
Epoch 2/2... Discriminator Loss: 1.2260... Generator Loss: 0.8541
Epoch 2/2... Discriminator Loss: 1.3925... Generator Loss: 0.7252
Epoch 2/2... Discriminator Loss: 1.3461... Generator Loss: 0.8645
Epoch 2/2... Discriminator Loss: 1.3295... Generator Loss: 0.8737
Epoch 2/2... Discriminator Loss: 1.2946... Generator Loss: 0.8291
Epoch 2/2... Discriminator Loss: 1.3585... Generator Loss: 0.7978
Epoch 2/2... Discriminator Loss: 1.2757... Generator Loss: 0.8315
Epoch 2/2... Discriminator Loss: 1.2209... Generator Loss: 1.0305
Epoch 2/2... Discriminator Loss: 1.2975... Generator Loss: 0.9054
Epoch 2/2... Discriminator Loss: 1.3298... Generator Loss: 0.8757
Epoch 2/2... Discriminator Loss: 1.2991... Generator Loss: 0.9607
Epoch 2/2... Discriminator Loss: 1.3068... Generator Loss: 0.8984
Epoch 2/2... Discriminator Loss: 1.2980... Generator Loss: 0.8792
Epoch 2/2... Discriminator Loss: 1.3372... Generator Loss: 0.9896
Epoch 2/2... Discriminator Loss: 1.2906... Generator Loss: 0.9989
Epoch 2/2... Discriminator Loss: 1.3465... Generator Loss: 0.7240
Epoch 2/2... Discriminator Loss: 1.2738... Generator Loss: 0.9434
Epoch 2/2... Discriminator Loss: 1.3462... Generator Loss: 1.0499
Epoch 2/2... Discriminator Loss: 1.2900... Generator Loss: 0.8423
Epoch 2/2... Discriminator Loss: 1.3255... Generator Loss: 0.9710
Epoch 2/2... Discriminator Loss: 1.3392... Generator Loss: 0.7735
Epoch 2/2... Discriminator Loss: 1.3558... Generator Loss: 0.8434
Epoch 2/2... Discriminator Loss: 1.2864... Generator Loss: 0.8357
Epoch 2/2... Discriminator Loss: 1.3450... Generator Loss: 1.0301
Epoch 2/2... Discriminator Loss: 1.3354... Generator Loss: 0.9709
Epoch 2/2... Discriminator Loss: 1.3182... Generator Loss: 0.7822
Epoch 2/2... Discriminator Loss: 1.2357... Generator Loss: 0.9357
Epoch 2/2... Discriminator Loss: 1.3243... Generator Loss: 0.9046
Epoch 2/2... Discriminator Loss: 1.2921... Generator Loss: 0.9560
Epoch 2/2... Discriminator Loss: 1.2831... Generator Loss: 0.9220
Epoch 2/2... Discriminator Loss: 1.3414... Generator Loss: 0.8177
Epoch 2/2... Discriminator Loss: 1.2599... Generator Loss: 1.1728
Epoch 2/2... Discriminator Loss: 1.3068... Generator Loss: 0.8469
Epoch 2/2... Discriminator Loss: 1.3016... Generator Loss: 1.0181
Epoch 2/2... Discriminator Loss: 1.2942... Generator Loss: 1.0291
Epoch 2/2... Discriminator Loss: 1.2901... Generator Loss: 0.8729
Epoch 2/2... Discriminator Loss: 1.2999... Generator Loss: 0.7703
Epoch 2/2... Discriminator Loss: 1.2133... Generator Loss: 0.9067
Epoch 2/2... Discriminator Loss: 1.3130... Generator Loss: 0.9714
Epoch 2/2... Discriminator Loss: 1.3317... Generator Loss: 0.8909
Epoch 2/2... Discriminator Loss: 1.3617... Generator Loss: 0.9297
Epoch 2/2... Discriminator Loss: 1.2770... Generator Loss: 0.8988
Epoch 2/2... Discriminator Loss: 1.2374... Generator Loss: 0.8900
Epoch 2/2... Discriminator Loss: 1.3593... Generator Loss: 0.7433
Epoch 2/2... Discriminator Loss: 1.2617... Generator Loss: 0.9621
Epoch 2/2... Discriminator Loss: 1.2968... Generator Loss: 0.9885
Epoch 2/2... Discriminator Loss: 1.2657... Generator Loss: 0.8843
Epoch 2/2... Discriminator Loss: 1.3181... Generator Loss: 0.9682
Epoch 2/2... Discriminator Loss: 1.2794... Generator Loss: 1.0763
Epoch 2/2... Discriminator Loss: 1.3263... Generator Loss: 0.9625
Epoch 2/2... Discriminator Loss: 1.2642... Generator Loss: 0.9345
Epoch 2/2... Discriminator Loss: 1.3106... Generator Loss: 0.9086
Epoch 2/2... Discriminator Loss: 1.2431... Generator Loss: 0.9845
Epoch 2/2... Discriminator Loss: 1.2791... Generator Loss: 0.8955
Epoch 2/2... Discriminator Loss: 1.2865... Generator Loss: 0.8493
Epoch 2/2... Discriminator Loss: 1.2802... Generator Loss: 1.0429
Epoch 2/2... Discriminator Loss: 1.3083... Generator Loss: 0.7901
Epoch 2/2... Discriminator Loss: 1.2394... Generator Loss: 0.9696
Epoch 2/2... Discriminator Loss: 1.3286... Generator Loss: 0.7403
Epoch 2/2... Discriminator Loss: 1.3276... Generator Loss: 0.7881
Epoch 2/2... Discriminator Loss: 1.3026... Generator Loss: 0.9719
Epoch 2/2... Discriminator Loss: 1.2910... Generator Loss: 0.9319
Epoch 2/2... Discriminator Loss: 1.3218... Generator Loss: 0.8315
Epoch 2/2... Discriminator Loss: 1.2937... Generator Loss: 1.0263
Epoch 2/2... Discriminator Loss: 1.3297... Generator Loss: 0.8812
Epoch 2/2... Discriminator Loss: 1.2945... Generator Loss: 1.0493
Epoch 2/2... Discriminator Loss: 1.3079... Generator Loss: 0.9229
Epoch 2/2... Discriminator Loss: 1.2536... Generator Loss: 0.9273
Epoch 2/2... Discriminator Loss: 1.2632... Generator Loss: 0.8157
Epoch 2/2... Discriminator Loss: 1.2736... Generator Loss: 0.9299
Epoch 2/2... Discriminator Loss: 1.3932... Generator Loss: 0.7509
Epoch 2/2... Discriminator Loss: 1.2990... Generator Loss: 0.8340
Epoch 2/2... Discriminator Loss: 1.2832... Generator Loss: 0.9616
Epoch 2/2... Discriminator Loss: 1.2781... Generator Loss: 0.9863
Epoch 2/2... Discriminator Loss: 1.2856... Generator Loss: 1.1611
Epoch 2/2... Discriminator Loss: 1.2197... Generator Loss: 0.8847
Epoch 2/2... Discriminator Loss: 1.3556... Generator Loss: 0.7923
Epoch 2/2... Discriminator Loss: 1.2587... Generator Loss: 0.9062
Epoch 2/2... Discriminator Loss: 1.3589... Generator Loss: 0.8644
Epoch 2/2... Discriminator Loss: 1.2839... Generator Loss: 0.8611
Epoch 2/2... Discriminator Loss: 1.2953... Generator Loss: 0.9098
Epoch 2/2... Discriminator Loss: 1.2995... Generator Loss: 0.9947
Epoch 2/2... Discriminator Loss: 1.3088... Generator Loss: 1.1201
Epoch 2/2... Discriminator Loss: 1.2783... Generator Loss: 1.0385
Epoch 2/2... Discriminator Loss: 1.2801... Generator Loss: 0.9944
Epoch 2/2... Discriminator Loss: 1.4045... Generator Loss: 0.8271
Epoch 2/2... Discriminator Loss: 1.2409... Generator Loss: 0.9649
Epoch 2/2... Discriminator Loss: 1.1984... Generator Loss: 0.9229
Epoch 2/2... Discriminator Loss: 1.2721... Generator Loss: 0.7685
Epoch 2/2... Discriminator Loss: 1.2579... Generator Loss: 0.8947
Epoch 2/2... Discriminator Loss: 1.3582... Generator Loss: 1.1712
Epoch 2/2... Discriminator Loss: 1.3601... Generator Loss: 0.7376
Epoch 2/2... Discriminator Loss: 1.2780... Generator Loss: 0.8572
Epoch 2/2... Discriminator Loss: 1.2906... Generator Loss: 0.8934
Epoch 2/2... Discriminator Loss: 1.3127... Generator Loss: 0.9437
Epoch 2/2... Discriminator Loss: 1.2300... Generator Loss: 1.0352
Epoch 2/2... Discriminator Loss: 1.2354... Generator Loss: 0.8834
Epoch 2/2... Discriminator Loss: 1.2652... Generator Loss: 0.8750
Epoch 2/2... Discriminator Loss: 1.3344... Generator Loss: 1.0414
Epoch 2/2... Discriminator Loss: 1.3679... Generator Loss: 0.8131
Epoch 2/2... Discriminator Loss: 1.2934... Generator Loss: 0.9099
Epoch 2/2... Discriminator Loss: 1.2326... Generator Loss: 0.9850
Epoch 2/2... Discriminator Loss: 1.3153... Generator Loss: 0.7665
Epoch 2/2... Discriminator Loss: 1.3216... Generator Loss: 0.8457
Epoch 2/2... Discriminator Loss: 1.2450... Generator Loss: 0.9085
Epoch 2/2... Discriminator Loss: 1.2460... Generator Loss: 0.8049

提交项目

提交本项目前,确保运行所有 cells 后保存该文件。

保存该文件为 "dlnd_face_generation.ipynb", 并另存为 HTML 格式 "File" -> "Download as"。提交项目时请附带 "helper.py" 和 "problem_unittests.py" 文件。